home *** CD-ROM | disk | FTP | other *** search
- (* This file was mangled by Mangler 1.35 (c) Copyright 1993-1994 by Berend de Boer *)
- { Created : From BBUTIL.PAS for Turbo Pascal 5.5
-
- Last changes :
- 93-02-27 Added procedure Discard, mainly an idea of Pete Roth, posted in
- COMP.LANG.PASCAL
- 93-09-22 Copied TSItem from Dialogs to BBUtil so units will be less
- tv dependent. Renamed it to TSLink.
- Renamed DisposeSItem to DisposeSLink. DisposeSItem is removed
- in this regard. It's now added to BBDlg
- 93-09-23 Copied FormatStr from Drivers. It still needs FORMAT.OBJ to
- link properly
- 93-12-04 Added GetLogicalAddr, moved from TDInfo
- Procedures HorizLine, CalcCents and IncTotaal deleted
- 93-12-07 Moved GetLogicalAddr to BBError
- 93-12-08 Procedure Beep removed
- 93-12-09 Added TByteArray with MaxWord entries
- 93-12-13 Removed Crt from uses clause
- 94-01-01 Added function ScasW
- 94-02-15 Added function Min which returns the minimum of two longints
- 94-04-15 Removed array Maanden to BBDate
- 94-05-16 Adapted to the Windows environment
- 94-08-31 Added function ValHex
- 94-10-06 Moved function DateValid as DateStrValid to BBDate
- 94-10-12 Added function HexB to return a byte in hex format
-
-
- Remarks:
- function FreeStr should be considered obsolete
- }
-
-
- {$IFDEF MsDos}
- {$F+,O+,D-}
- {$ENDIF}
-
- {$R-,Q-,I-,S-,X+}
- unit BBUtil;
-
- interface
-
- uses Objects;
-
-
- const
- CR = #13;
- LF = #10;
- FF = #12;
- FormFeed = #12;
-
- const
- prnLineFeed = #10;
- prnFormFeed = #12;
- prnCR = #13;
- prnNL = #13#10; {* advance to next line and give a CR *}
- prnLargeOn = #27+'W'+#1; {* Shift Out, double width characters *}
- prnSmallOn = #15; {* Shift In, small characters, 17CPI *}
- prnSmallOff = #18; {* stops printing in small characters *}
- prnLargeOff = #27+'W'+#0; {* stops printing with double char width *}
- prnCAN = #24; {* empties printerbuffer without any printing *}
- prnUndOn = #27 + '-1'; {* prints with underlined text *}
- prnUndOff = #27 + '-0'; {* stops printing with underlines *}
- prnBoldOn = #27 + 'E';
- prnBoldOff = #27 + 'F';
- prnDoubleOn = #27 + 'G'; {* start printing two times a line *}
- prnDoubleOff = #27 + 'H'; {* stops printing a line two times *}
-
-
- const
- MaxWord = $FFFF;
-
- type
- PSLink = ^TSLink;
- TSLink = record
- Value: PString;
- Next: PSLink;
- end;
-
-
- var
- valcode : word;
-
-
- {* number -> Str *}
-
- function StrS(n : shortint) : string;
- function StrB(n : byte) : string;
- function StrI(n : integer) : string;
- function StrW (n : word) : string;
- function StrL(n : longint) : string;
- function StrR(n : real; width, decimals : word) : string;
- function LeadingZero(value : word) : string;
- function HexB(b : byte) : string;
- function HexStr(w : word) : string;
-
- {* Str -> number *}
-
- function ValB(const s : string) : byte;
- function ValI(const s : string) : integer;
- function ValW(const s : string) : word;
- function ValL(const s : string) : longint;
- function ValR(const s : string) : real;
- function ValHex(const s : string) : longint;
-
- {* Uppercase and Lowercase string *}
-
- function LowCase(c : char) : char;
- function LowStr(const s : string) : string;
- function UpStr(const s : string) : string;
- function FancyStr(s : string) : string;
-
- {* Various string routines *}
-
- function CPos(c : char; const s : string) : byte;
- function Empty(const s : string) : Boolean;
- function ExtractStr(const From, startStr, endStr : string) : string;
- procedure FormatStr(var Result : string; const Format : string; var Params);
- function FTCopy(const s : string; f,t : word) : string;
- function GetAddrStr(Addr : pointer) : string;
- function GetDateStr : string;
- function GetTimeStr : string;
- function LeftJustify(const s : string; f_len : integer) : string;
- function RepChar(c : char; Count : integer) : string;
- function RightJustify(const s : string; f_len : word) : string;
- function Spc(Count : integer) : string;
- function Spoiled(const s : string) : Boolean;
- function StripSpc(const s : string) : string;
- function TrimRight(const s : string) : string;
- function ZeroRightJustify(const s : string; f_len : word) : string;
-
- {* Dynamic strings *}
-
- procedure FreeStr(p : PString);
- function GetStr(p : PString) : string;
- procedure ReplaceStr(var p : PString; s : string);
-
- {* Various *}
-
- function CMPB(const ptr1, ptr2; Size : word) : integer;
- function CMPW(const ptr1, ptr2; Size : word) : integer;
- procedure Compare(var ptr1, ptr2; rsize : word; var flag : byte);
- procedure Discard(var p);
- procedure DisposeSLink(PS : PSLink);
- function Min(L1, L2 : longint) : longint;
- function NewSLink(const Str : string; ANext : PSLink) : PSLink;
- function Rnd(r : real) : real;
- function ScanB(Area : pointer; Size : word; Value : byte) : word;
- function ScanW(Area : pointer; Size : word; Value : word) : word;
- procedure SmallEndianI(var i : integer);
- procedure SmallEndianW(var w : word);
- procedure SmallEndianL(var l : longint);
-
-
-
- IMPLEMENTATION USES {$IFDEF Windows}WINDOS {$ELSE}DOS {$ENDIF};FUNCTION STRS (N:SHORTINT):STRING ;VAR OO10:PSTRING;
- BEGIN ASM {} LES DI , @Result {} MOV WORD PTR OO10, DI {} MOV WORD PTR OO10+ 2 , ES {} END;STR (N , OO10 ^);END ;
- FUNCTION STRB (N:BYTE):STRING ;VAR OO1O:STRING ;BEGIN STR (N , OO1O );STRB := OO1O ;END ;FUNCTION STRL (N:LONGINT):STRING
- ;VAR OO10:PSTRING;BEGIN ASM {} LES DI , @Result {} MOV WORD PTR OO10, DI {} MOV WORD PTR OO10+ 2 , ES {} END;STR (N ,
- OO10 ^);END ;FUNCTION STRW (N:WORD):STRING ;VAR OO1O:STRING ;BEGIN STR (N , OO1O );STRW := OO1O ;END ;FUNCTION STRI
- (N:INTEGER):STRING ;VAR OO1O:STRING ;BEGIN STR (N , OO1O );STRI := OO1O ;END ;FUNCTION STRR (N:REAL;
- WIDTH,DECIMALS:WORD):STRING ;VAR OO1O:STRING ;BEGIN IF (WIDTH =0 )AND (DECIMALS =0 )THEN STR (N , OO1O )ELSE STR (N
- :WIDTH :DECIMALS , OO1O );STRR := OO1O ;END ;FUNCTION LEADINGZERO (VALUE:WORD):STRING ;VAR OO1O:STRING ;BEGIN STR (VALUE
- , OO1O );IF LENGTH (OO1O )=1 THEN OO1O := '0'+ OO1O ;LEADINGZERO := OO1O ;END ;CONST OOIOOOI11OI1:ARRAY [ 0 .. 15 ]
- OF CHAR='0123456789ABCDEF';FUNCTION HEXB (B:BYTE):STRING ;BEGIN HEXB := OOIOOOI11OI1 [ (B SHR 4 )] + OOIOOOI11OI1 [ B
- MOD 16 ] ;END ;FUNCTION HEXSTR (W:WORD):STRING ;BEGIN HEXSTR := OOIOOOI11OI1 [ (W SHR 12 )MOD 16 ] + OOIOOOI11OI1 [ (W
- SHR 8 )MOD 16 ] + OOIOOOI11OI1 [ (W SHR 4 )MOD 16 ] + OOIOOOI11OI1 [ W MOD 16 ] ;END ;FUNCTION VALB (CONST S:STRING
- ):BYTE ;VAR OIOO:WORD;BEGIN VAL (S , OIOO , VALCODE );VALB := LO (OIOO );END ;FUNCTION VALI (CONST S:STRING ):INTEGER ;
- VAR OIOO:INTEGER;BEGIN VAL (S , OIOO , VALCODE );VALI := OIOO ;END ;FUNCTION VALW (CONST S:STRING ):WORD ;VAR OIOO:WORD;
- BEGIN VAL (S , OIOO , VALCODE );VALW := OIOO ;END ;FUNCTION VALL (CONST S:STRING ):LONGINT ;VAR OIOO:LONGINT;BEGIN VAL (S
- , OIOO , VALCODE );VALL := OIOO ;END ;FUNCTION VALR (CONST S:STRING ):REAL ;VAR OO1I:REAL;BEGIN VAL (S , OO1I , VALCODE
- );VALR := OO1I ;END ;FUNCTION VALHEX (CONST S:STRING ):LONGINT ;VAR OIlO:INTEGER;OO01:LONGINT;OI1I1O01l1ll:LONGINT;
- FUNCTION OIIll1OllI0 (OIOI:CHAR):BYTE ;BEGIN CASE OIOI OF 'a'.. 'f':OIIll1OllI0 := ORD (OIOI )- ORD ('a')+ 10 ;'A'..
- 'F':OIIll1OllI0 := ORD (OIOI )- ORD ('A')+ 10 ;'0'.. '9':OIIll1OllI0 := ORD (OIOI )- ORD ('0');ELSE OIIll1OllI0 := 0 ;
- END ;END ;BEGIN OO01 := 0 ;OI1I1O01l1ll := 1 ;FOR OIlO := LENGTH (S )DOWNTO 1 DO BEGIN OO01 := OO01 + OIIll1OllI0 (S [
- OIlO ] )* OI1I1O01l1ll ;OI1I1O01l1ll := OI1I1O01l1ll * 16 ;END ;VALHEX := OO01 ;END ;FUNCTION LOWCASE (C:CHAR):CHAR ;
- BEGIN IF C IN [ 'A'.. 'Z'] THEN LOWCASE := CHR (ORD (C )+ (97 - 65 ))ELSE LOWCASE := C ;END ;FUNCTION LOWSTR
- (CONST S:STRING ):STRING ;ASSEMBLER;ASM {} PUSH DS {} CLD {} LDS SI , S{} LES DI , @Result {} LODSB {} STOSB {}
- XOR AH , AH {} XCHG AX , CX {} JCXZ @3 {} @1 : {} LODSB {} CMP AL , 'A' {} JB @2 {} CMP AL , 'Z' {} JA @2 {}
- ADD AL , 20H {} @2 : {} STOSB {} LOOP @1 {} @3 : {} POP DS {} END;FUNCTION UPSTR (CONST S:STRING ):STRING ;ASSEMBLER;
- ASM {} PUSH DS {} CLD {} LDS SI , S{} LES DI , @Result {} LODSB {} STOSB {} XOR AH , AH {} XCHG AX , CX {} JCXZ @3 {}
- @1 : {} LODSB {} CMP AL , 'a' {} JB @2 {} CMP AL , 'z' {} JA @2 {} SUB AL , 20H {} @2 : {} STOSB {} LOOP @1 {} @3 : {}
- POP DS {} END;FUNCTION FANCYSTR (S:STRING ):STRING ;VAR OIlO:WORD;BEGIN S [ 1 ] := UPCASE (S [ 1 ] );FOR OIlO := 2 TO
- LENGTH (S ) DO IF (S [ OIlO - 1 ] IN [ ' ', '-'] )THEN S [ OIlO ] := UPCASE (S [ OIlO ] )ELSE S [ OIlO ] := LOWCASE (S [
- OIlO ] );FANCYSTR := S ;END ;FUNCTION CPOS (C:CHAR;CONST S:STRING ):BYTE ;ASSEMBLER;ASM {} MOV AL , C{} CLD {}
- LES DI , S{} MOV CL , ES : [ DI ] {} MOV AH , CL {} XOR CH , CH {} JCXZ @end {} INC DI {} REPNE SCASB {} JNZ @end {}
- NEG CL {} ADD CL , AH {} @end : {} MOV AL , CL {} END;FUNCTION EMPTY (CONST S:STRING ):BOOLEAN ;ASSEMBLER;ASM {}
- LES DI , S{} MOV CL , [ ES : DI ] {} XOR CH , CH {} JCXZ @Empty {} MOV AL , ' ' {} INC DI {} CLD {} REPE SCASB {}
- JZ @Empty {} XOR AX , AX {} JMP @end {} @Empty : {} MOV AX , 1 {} @end : {} END;FUNCTION EXTRACTSTR
- (CONST FROM,STARTSTR,ENDSTR:STRING ):STRING ;VAR OIlO,OIll:WORD;BEGIN IF STARTSTR =''THEN OIlO := 1 ELSE OIlO := POS
- (STARTSTR , FROM )+ LENGTH (STARTSTR );IF ENDSTR =''THEN OIll := LENGTH (FROM )ELSE OIll := POS (ENDSTR , FROM )- 1 ;IF
- (OIll < OIlO )AND (LENGTH (ENDSTR )=1 )THEN BEGIN OIll := OIlO ;WHILE FROM [ OIll ] <> ENDSTR [ 1 ] DO INC (OIll );DEC
- (OIll );END ;EXTRACTSTR := FTCOPY (FROM , OIlO , OIll );END ;{$L FORMAT.OBJ}PROCEDURE FORMATSTR (VAR RESULT:STRING ;
- CONST FORMAT:STRING ;VAR PARAMS);EXTERNAL;FUNCTION FTCOPY (CONST S:STRING ;F,T:WORD):STRING ;
- BEGIN {$IFOPT Q+}{$Q-}FTCOPY := COPY (S , F , T - F + 1 );{$Q+}{$ELSE}FTCOPY := COPY (S , F , T - F + 1 );{$ENDIF}END ;
- FUNCTION GETADDRSTR (ADDR:POINTER):STRING ;BEGIN GETADDRSTR := HEXSTR (PTRREC (ADDR ). SEG )+ ':'+ HEXSTR (PTRREC (ADDR
- ). OFS );END ;FUNCTION GETDATESTR :STRING ;VAR OOIl,OO0I,OIOO,OIlO11001ll:WORD;BEGIN GETDATE (OOIl , OO0I , OIOO ,
- OIlO11001ll );GETDATESTR := STRW (OOIl )+ '-'+ LEADINGZERO (OO0I )+ '-'+ LEADINGZERO (OIOO );END ;FUNCTION GETTIMESTR
- :STRING ;VAR OIlI,OO0I,OO1O,O11l0Il0:WORD;BEGIN GETTIME (OIlI , OO0I , OO1O , O11l0Il0 );GETTIMESTR := LEADINGZERO (OIlI
- )+ ':'+ LEADINGZERO (OO0I )+ ':'+ LEADINGZERO (OO1O );END ;FUNCTION LEFTJUSTIFY (CONST S:STRING ;F_LEN:INTEGER):STRING ;
- BEGIN LEFTJUSTIFY := COPY (S + SPC (ABS (F_LEN - LENGTH (S ))), 1 , F_LEN );END ;FUNCTION REPCHAR (C:CHAR;
- COUNT:INTEGER):STRING ;VAR OO1O:STRING ;BEGIN IF COUNT <= 0 THEN REPCHAR := ''ELSE BEGIN FILLCHAR (OO1O [ 1 ] , COUNT , C
- );OO1O [ 0 ] := CHR (COUNT );REPCHAR := OO1O ;END ;END ;FUNCTION RIGHTJUSTIFY (CONST S:STRING ;F_LEN:WORD):STRING ;
- VAR OIOO:STRING ;BEGIN OIOO := SPC (ABS (F_LEN - LENGTH (S )))+ S ;RIGHTJUSTIFY := COPY (OIOO , LENGTH (OIOO )- F_LEN + 1
- , F_LEN );END ;FUNCTION SPC (COUNT:INTEGER):STRING ;VAR OO1O:STRING ;BEGIN IF COUNT <= 0 THEN SPC := ''ELSE
- BEGIN FILLCHAR (OO1O [ 1 ] , ABS (COUNT ), ' ');OO1O [ 0 ] := CHR (ABS (COUNT ));SPC := OO1O ;END ;END ;FUNCTION SPOILED
- (CONST S:STRING ):BOOLEAN ;ASSEMBLER;ASM {} CLD {} LES SI , S{} MOV CL , [ ES : SI ] {} XOR CH , CH {}
- JCXZ @notspoiled {} INC SI {} @next : SEGES LODSB {} CMP AL , 32 {} JB @spoiled {} CMP AL , 163 {} JA @spoiled {}
- LOOP @next {} @notspoiled : {} XOR AL , AL {} JMP @end {} @spoiled : {} MOV AL , 1 {} @end : {} END;FUNCTION STRIPSPC
- (CONST S:STRING ):STRING ;ASSEMBLER;ASM {} LES DI , S{} MOV CL , [ ES : DI ] {} XOR CH , CH {} JCXZ @setlength {}
- MOV AL , ' ' {} ADD DI , CX {} STD {} REPE SCASB {} JNZ @@1 {} JCXZ @setlength {} @@1 : {} INC CL {} CLD {} LES DI , S{}
- INC DI {} REPE SCASB {} DEC DI {} MOV SI , DI {} MOV DX , DS {} MOV AX , ES {} MOV DS , AX {} LES DI , @Result {}
- INC CL {} MOV [ ES : DI ] , CL {} INC DI {} REP MOVSB {} MOV DS , DX {} JMP @end {} @setlength : {} LES DI , @Result {}
- MOV [ ES : DI ] , CL {} @end : {} END;FUNCTION TRIMRIGHT (CONST S:STRING ):STRING ;ASSEMBLER;ASM {} LES DI , S{}
- MOV CL , [ ES : DI ] {} XOR CH , CH {} JCXZ @setlength {} MOV AL , ' ' {} ADD DI , CX {} STD {} REPE SCASB {}
- JCXZ @setlength {} INC CL {} CLD {} MOV DX , DS {} LDS SI , S{} INC SI {} LES DI , @Result {} MOV [ ES : DI ] , CL {}
- INC DI {} REP MOVSB {} MOV DS , DX {} JMP @end {} @setlength : {} LES DI , @Result {} MOV [ ES : DI ] , CL {} @end : {}
- END;FUNCTION ZERORIGHTJUSTIFY (CONST S:STRING ;F_LEN:WORD):STRING ;VAR OIOO:STRING ;BEGIN IF F_LEN >= LENGTH (S )THEN
- BEGIN OIOO := REPCHAR ('0', F_LEN - LENGTH (S ))+ S ;ZERORIGHTJUSTIFY := COPY (OIOO , LENGTH (OIOO )- F_LEN + 1 , F_LEN
- );END ELSE ZERORIGHTJUSTIFY := S ;END ;FUNCTION GETSTR (P:PSTRING):STRING ;ASSEMBLER;ASM {} PUSH DS {} LDS SI , P{}
- MOV AX , DS {} CMP AX , 0 {} JE @nilptr {} LES DI , @Result {} CLD {} MOV CL , [ SI ] {} MOV CH , 0 {} INC CX {}
- REP MOVSB {} POP DS {} JMP @end {} @nilptr : {} POP DS {} LES BX , @Result {} XOR AX , AX {} MOV [ ES : BX ] , AX {}
- @end : {} END;PROCEDURE FREESTR (P:PSTRING);BEGIN IF P <> NIL THEN DISPOSESTR (P );END ;PROCEDURE REPLACESTR
- (VAR P:PSTRING;S:STRING );BEGIN DISPOSESTR (P );P := NEWSTR (S );END ;PROCEDURE COMPARE (VAR PTR1,PTR2;RSIZE:WORD;
- VAR FLAG:BYTE);ASSEMBLER;ASM {} MOV DX , DS {} LDS SI , PTR2{} LES DI , PTR1{} CLD {} MOV CX , RSIZE{} REPE CMPSW {}
- LDS BX , FLAG{} JAE @@1 {} MOV BYTE PTR [ BX ] , 01h {} MOV DS , DX {} JMP @end {} @@1 : JNE @@2 {}
- MOV BYTE PTR [ BX ] , 0h {} MOV DS , DX {} JMP @end {} @@2 : MOV BYTE PTR [ BX ] , 0FFh {} MOV DS , DX {} @end : {} END;
- FUNCTION CMPB (CONST PTR1,PTR2;SIZE:WORD):INTEGER ;ASSEMBLER;ASM {} MOV DX , DS {} LDS SI , PTR2{} LES DI , PTR1{} CLD {}
- MOV CX , SIZE{} REPE CMPSB {} JAE @@AboveOrEqual {} MOV AX , 01h {} JMP @end {} @@AboveOrEqual : {} JNE @@Above {}
- MOV AX , 0h {} JMP @end {} @@Above : {} MOV AX , 0ffffh {} @end : {} MOV DS , DX {} END;FUNCTION CMPW (CONST PTR1,PTR2;
- SIZE:WORD):INTEGER ;ASSEMBLER;ASM {} MOV DX , DS {} LDS SI , PTR2{} LES DI , PTR1{} CLD {} MOV CX , SIZE{} REPE CMPSW {}
- JAE @@AboveOrEqual {} MOV AX , 01h {} JMP @end {} @@AboveOrEqual : {} JNE @@Above {} MOV AX , 0h {} MOV DS , DX {}
- JMP @end {} @@Above : {} MOV AX , 0ffffh {} @end : {} MOV DS , DX {} END;PROCEDURE DISCARD (VAR P);
- VAR O11III0l:POBJECT ABSOLUTE P;BEGIN IF O11III0l <> NIL THEN BEGIN DISPOSE (O11III0l , DONE );O11III0l := NIL ;END ;
- END ;PROCEDURE DISPOSESLINK (PS:PSLINK);BEGIN IF PS <> NIL THEN BEGIN DISPOSESLINK (PS ^. NEXT );DISPOSESTR (PS ^. VALUE
- );DISPOSE (PS );END ;END ;FUNCTION MIN (L1,L2:LONGINT):LONGINT ;BEGIN IF L1 < L2 THEN MIN := L1 ELSE MIN := L2 ;END ;
- FUNCTION NEWSLINK (CONST STR:STRING ;ANEXT:PSLINK):PSLINK ;VAR OI1000l1II00:PSLINK;BEGIN NEW (OI1000l1II00 );
- OI1000l1II00 ^. VALUE := NEWSTR (STR );OI1000l1II00 ^. NEXT := ANEXT ;NEWSLINK := OI1000l1II00 ;END ;FUNCTION RND
- (R:REAL):REAL ;VAR OO1O:STRING ;OI0ll01lOOOl:WORD;O11IlIIO:INTEGER;BEGIN STR (R :20 :3 , OO1O );IF OO1O [ LENGTH (OO1O )-
- 2 ] ='-'THEN BEGIN O11IlIIO := POS ('.', OO1O )+ 2 ;IF OO1O [ O11IlIIO + 1 ] >= '5'THEN BEGIN INC (BYTE (OO1O [ O11IlIIO
- ] ));WHILE OO1O [ O11IlIIO ] =':' DO BEGIN OO1O [ O11IlIIO ] := '0';DEC (O11IlIIO );IF OO1O [ O11IlIIO ] ='.'THEN DEC
- (O11IlIIO );INC (OO1O [ O11IlIIO ] );END ;END ;VAL (COPY (OO1O , 1 , O11IlIIO ), R , OI0ll01lOOOl );END ELSE
- BEGIN O11IlIIO := POS ('.', OO1O )+ 2 ;IF OO1O [ O11IlIIO + 1 ] >= '5'THEN BEGIN INC (BYTE (OO1O [ O11IlIIO ] ));
- WHILE OO1O [ O11IlIIO ] =':' DO BEGIN OO1O [ O11IlIIO ] := '0';DEC (O11IlIIO );IF OO1O [ O11IlIIO ] ='.'THEN DEC
- (O11IlIIO );INC (OO1O [ O11IlIIO ] );END ;END ;VAL (COPY (OO1O , 1 , O11IlIIO ), R , OI0ll01lOOOl );END ;RND := R ;END ;
- FUNCTION SCANB (AREA:POINTER;SIZE:WORD;VALUE:BYTE):WORD ;ASSEMBLER;ASM {} MOV AL , VALUE{} CLD {} LES DI , AREA{}
- MOV CX , SIZE{} MOV BX , CX {} JCXZ @end {} REPNE SCASB {} JNZ @end {} NEG CX {} ADD CX , BX {} @end : {} MOV AX , CX {}
- END;FUNCTION SCANW (AREA:POINTER;SIZE:WORD;VALUE:WORD):WORD ;ASSEMBLER;ASM {} MOV AX , VALUE{} CLD {} LES DI , AREA{}
- MOV CX , SIZE{} MOV BX , CX {} JCXZ @end {} REPNE SCASW {} JNZ @end {} NEG CX {} ADD CX , BX {} @end : {} MOV AX , CX {}
- END;PROCEDURE SMALLENDIANI (VAR I:INTEGER);ASSEMBLER;ASM {} LES DI , I{} MOV AX , WORD PTR ES : [ DI ] {}
- MOV BYTE PTR ES : [ DI ] , AH {} MOV BYTE PTR ES : [ DI ] + 1 , AL {} END;PROCEDURE SMALLENDIANW (VAR W:WORD);ASSEMBLER;
- ASM {} LES DI , W{} MOV AX , WORD PTR ES : [ DI ] {} MOV BYTE PTR ES : [ DI ] , AH {}
- MOV BYTE PTR ES : [ DI ] + 1 , AL {} END;PROCEDURE SMALLENDIANL (VAR L:LONGINT);ASSEMBLER;ASM {} LES DI , L{}
- MOV DX , WORD PTR ES : [ DI ] {} MOV AX , WORD PTR ES : [ DI + 2 ] {} MOV BYTE PTR ES : [ DI ] , AH {}
- MOV BYTE PTR ES : [ DI ] + 1 , AL {} MOV BYTE PTR ES : [ DI ] + 2 , DH {} MOV BYTE PTR ES : [ DI ] + 3 , DL {} END;END .
-